#pragma once
#include<iostream>
#include"inetAdder.hpp"
#include<vector>
class Route
{
    private:
    bool exist(inetaddr& client)
    {
        for(auto& user: _online_user)
        {
            if(user==client)
            {
                return true;
            }
        }
         return false;
    }
     void adduser(inetaddr& client)
    {
        std::cout<<"add a new user:"<<client.Stringaddr()<<std::endl;//输出一个日志
        _online_user.push_back(client);
    }
    void Deleteuser(inetaddr& client)
    {
        for(auto iter = _online_user.begin();iter !=_online_user.end();iter++)
        {
            if(*iter == client)
            {
                _online_user.erase(iter);
                break;
            }
        }
    }
    public:
    Route()
    {}
    void messageroute(int sockfd,const std::string &message,inetaddr &client)
    {
        if(!exist(client))//判断用户是否存在
        {
            adduser(client);//如果不存在就添加用户
        }
        if(message =="QUIT")//用户想要退出
        {
            Deleteuser(client);
        }
        std::string send_message = client.Stringaddr()+=message;
        for(auto &user:_online_user)
        {
            //遍历所有用户，将消息传给所有人
            sendto(sockfd,send_message.c_str(),send_message.size(),0/*读取方式*/,(struct sockaddr*)&user.Netaddr(),sizeof(user.Netaddr()));
        }
    }
    ~Route()
    {}
    private:
    std::vector<inetaddr> _online_user;//所有的在线用户，用一个数组来管理
};